package com.zjj.concurrent.completableFuture;

import java.util.concurrent.CompletableFuture;

/**
 * @author: zhanglei.zjj
 * @date: 2024/4/21 16:41
 * @description: handle 方法用于处理异步操作的结果或异常，无论异步操作是否成功都会执行指定的操作，并返回一个新的 CompletableFuture 对象
 * handle 方法接受一个 BiFunction 参数，该函数接受两个参数：异步操作的结果（如果操作成功）或异常（如果操作失败），并返回一个结果
 */
public class HandleTest {
    public static void main(String[] args) {
        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
            // 这里简单返回一个结果
            return 42;
        });

        CompletableFuture<String> resultFuture = future.handle((result, throwable) -> {
            if (throwable != null) {
                // 如果异步操作发生异常，进行异常处理
                return "Error occurred: " + throwable.getMessage();
            } else {
                // 如果异步操作成功，进行结果处理
                return "Result: " + result;
            }
        });

        // 等待异步操作完成，并处理最终结果
        String result = resultFuture.join();
        System.out.println(result); // 输出：Result: 42

    }
}
